import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

#读取数据
dataset=pd.read_csv('breast_cancer_data.csv')
#print(dataset)

#提取x
x=dataset.iloc[:,:-1]#取出所有行，除最后一列的所有列
#print(x)

#提取数据中的标签
y=dataset['target']
#print(y)#1是良性

#划分数据集和测试集
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2)

#进行数据的归一化.标签不需要归一化
sc=MinMaxScaler(feature_range=(0,1))
x_train=sc.fit_transform(x_train)
x_test=sc.transform(x_test)
#print(x_train)

#逻辑回归模型搭建
lr=LogisticRegression()#实例化
lr.fit(x_train,y_train)

#打印模型的参数
# print('w',lr.coef_)
# print('b',lr.intercept_)

#利用训练好的模型进行推理测试
pre_result=lr.predict(x_test)
#print(pre_result)

#打印预测结果的概率
pre_result_proba=lr.predict_proba(x_test)
#print(pre_result_proba)

#第一列是恶性，获取第一列
pre_list=pre_result_proba[:,1]#1是良性
#print(pre_list)

#设置阈值
threshold=0.6#尽可能要检出所有患病

#设置保存结果的列表
result=[]
result_name=[]

for i in range(len(pre_list)):
    if pre_list[i]>threshold:
        result.append(1)
        result_name.append('良性')
    else:
        result.append(0)
        result_name.append('恶性')

#打印阈值调整后的结果
print(result)
print(result_name)

#输出结果的精确率和召回率还有f1值
report=classification_report(y_test,result,labels=[0,1],target_names=['恶性肿瘤','良性肿瘤'])#计算精度和召回率
print(report)


